Prototype Factory

자주 복제해서 사용할 객체를 전역변수를 선언해서 어디서든 복제해서 사용할 수 있다.
혹은, 프로토타입을 저장할 별도의 클래스를 생성하고, 사용자가 원할 때 목적에 맞는 복제본을
요구받는 시점에 만들어 제공해서 복제할 수 있다.
struct EmployeeFactory{
static Contact main;
static Contact aux;
static unique_ptr<Contact> NewMainOfficeEmployee(string name, int suite){
return NewEmployee(name, suite, main);
}
static unique_ptr<Contact> NewAuxOfficeEmployee(string name, int suite){
return NewEmployee(name, suite, aux);
}
private:
static unique_ptr<Contact> NewEmployee(string name, int suite, Contact& proto){
auto result=make_unique<Contact>(proto);
result->name=name;
result->address->suite=suite;
return result;
}
};
//
auto john=EmployeeFactory::NewAuxOfficeEmployee("John Doe", 123);
auto jane=EmployeeFactory::NewMainOfficeEmployee("Jane Doe", 125);
팩토리를 사용해서 미완성된 객체 복제본이 생성될 수 있을 가능성을 막을 수 있다.
(이전에 프로토타입 복사는 사용자가 직접 내용을 수정해 주어야 했음, 프로토타입 팩토리는 수정까지 해서
복사본을 리턴해 줌)